01
Qué resuelve
- Javi recibe facturas de proveedores por correo (a menudo reenviadas de otras cuentas).
- Meterlas una a una en Holded es tedioso y se acumula → los gastos no quedan bien registrados.
- Este flujo automatiza todo el trabajo pesado (leer la factura, dar de alta el proveedor, crear el gasto, adjuntar el PDF) y deja solo el clic final de aprobar para Javi.
02
El circuito
Javi arrastra la factura del proveedor a la etiqueta
Gmail: GASTOS
│
«procesa gastos» (Javi/Ana lo pide)
│
▼
Por cada correo en label:GASTOS sin GASTOS/registradas :
│
1· Descargar el PDF adjunto y LEER los datos
(proveedor + CIF · nº factura · fecha · base · IVA · total)
│
2· ¿Existe el proveedor en Holded? ──NO──► darlo de alta
│ SÍ
▼
3· Crear la FACTURA DE COMPRA (gasto) en Holded
(importes + nº de factura del proveedor en la descripción)
│
4· ADJUNTAR el PDF original al documento ◄── siempre
│
5· Etiquetar el correo como GASTOS/registradas (no duplicar)
│
▼
Borrador listo en Holded con el PDF → JAVI da el OK
(pone nº si quiere · Aprobar / Contabilizar)
Principio de diseño (el sello Nexo): la IA prepara, Javi aprueba. Ningún gasto se contabiliza sin su visto bueno.
03
Paso a paso técnico
| Paso | Acción | Cómo |
| 1 | Leer factura | Descargar adjunto de Gmail y extraer texto del PDF (pypdf): proveedor, CIF, nº, fecha, base, IVA, total. |
| 2 | Alta proveedor | Si no existe: POST /invoicing/v1/contacts con type:supplier, name, code (CIF), email. |
| 3 | Crear gasto | POST /invoicing/v1/documents/purchase con contactId, date, items [{name, units:1, subtotal, tax}]. El nº de factura del proveedor va en desc/notes. |
| 4 | Adjuntar PDF | POST /documents/purchase/{id}/attach con el archivo (multipart). Siempre. |
| 5 | Marcar hecho | Añadir la subetiqueta Gmail GASTOS/registradas al correo. |
Clave de Holded en .env (HOLDED_API_KEY, cabecera key:).
04
Reglas y límites
- Aprobar es manual. Las facturas de compra creadas por la API de Holded entran como borrador sin número. Ni el número ni la aprobación se pueden fijar por API → lo hace Javi en Holded.
- Siempre se adjunta el PDF original al documento, para que quede el justificante junto al gasto.
- Anti-duplicados: solo se procesan los correos de
GASTOSque no tengan yaGASTOS/registradas. - Trazabilidad: el nº de factura del proveedor queda en la descripción del gasto para poder buscarlo.
Pendiente de estudiar: configurar una serie de numeración de compras en Holded para que los gastos salgan ya numerados, si se quiere reducir el paso manual.
05
Cómo se dispara
Disparador
- Javi/Ana dice «procesa gastos».
- Se procesan todas las facturas nuevas de la etiqueta GASTOS de una vez.
- Se devuelve un resumen de lo registrado (proveedor · nº · total · adjunto ✓).
06
Evolución futura
- Rutina automática: un agente que revise la etiqueta cada día y registre los gastos nuevos solo, sin que haya que pedirlo.
- Backend del producto (Fase 4): integrado con la entrada por WhatsApp y los tickets, con cierre completo del gasto (número + aprobación) sin paso manual.
- Encaja con la pieza «Entrada WhatsApp + tickets» del panel: que todo gasto tenga una sola fuente y suba solo a Holded.
07
Historial
- 2026-08-07 — Montado el circuito y probado con la primera factura real: Prodesco (fra. 264279 · 36,65 €) — proveedor dado de alta, gasto creado y PDF adjunto. Etiquetas
GASTOSyGASTOS/registradascreadas.